#include <iostream>
using namespace std;

//explicit是C++中的一个关键字，它用来修饰只有一个参数的类构造函数，
//以表明该构造函数是显式的，而非隐式的。当使用explicit修饰构造函数时，
//它将禁止类对象之间的隐式转换，以及禁止隐式调用拷贝构造函数。

class Test1 {
private:
    int A;
public:
    //在Test1之前加入关键字explicit则禁止隐式调用
    Test1 (int a) : A(a) {
        cout << 1 << endl;
    }

    Test1 (const Test1& t) {
        cout << 2 << endl;
    }
};

int main() {
//定义的时候复制会找构造函数，此时传递的是int，所以找到了输出为1的构造函数
    //输出为1
    Test1 a = 10;
    
    //输出为1 1
    Test1 a1(10);
    a1 = 100;

    //输出为2
    Test1 a2 = a;

    return 0;
}